package fr.m2if.main;

import java.util.ArrayList;
import java.util.List;

/**
 * Write a description of class Bibliotheque here.
 * 
 * @author (your name)
 * @version (a version number or a date)
 */
public class Bibliotheque {
	
	private static Bibliotheque instance;
	
	private String nom;
	private String adresse;
	private List<Livre> livres;
	public List<Livre> getLivres() {
		return livres;
	}

	public void setLivres(List<Livre> livres) {
		this.livres = livres;
	}

	private List<User> utilisateurs;
	
	public static Bibliotheque getInstance() {
		if (instance == null) {
			instance = new Bibliotheque();
		}
		return instance;
	}

	/**
	 * Constructor for objects of class Bibliotheque
	 */
	private Bibliotheque() {
		livres = new ArrayList<Livre>();
		setUtilisateurs(new ArrayList<User>());
	}

	public List<User> getUtilisateurs() {
		return utilisateurs;
	}

	public void setUtilisateurs(List<User> utilisateurs) {
		this.utilisateurs = utilisateurs;
	}


	public void setNom(String nom) {
		this.nom = nom;

	}

	public String getNom() {
		return this.nom;
	}

	public void setAdresse(String adresse) {
		this.adresse = adresse;

	}

	public String getAdresse() {
		return this.adresse;
	}

	public void ajouterLivre(Livre livre) {
		livres.add(livre);

	}
	
	public int getLivreDisponible(Livre l){
		int ret = -1;
		int i=0;
		for(Livre book:livres){
			if(book.equals(l)&&book.isDisponible()){
				ret=i;
			}
			i++;
		}
		return ret;
	}
	
	public int getLivreById(long l){
		int ret = -1;
		int i=0;
		for(Livre book:livres){
			if((l==book.getId())&&!book.isDisponible()){
				ret=i;
			}
			i++;
		}
		return ret;
	}
	
	public void emprunterLivre(Livre livre, User user) throws Exception{
		int id;
		if(!user.isInterdit()){
			if((id=getLivreDisponible(livre))!= -1){
				livres.get(id).setDisponible(false);
				user.getEmprunts().add(livre);
			}else{
				throw new Exception("No item available");
			}
		}else{
			throw new Exception("User is currently forbidden ");
		}
	}

	public void rendLivre(Livre livre, User usr){
		int i= getLivreById(livre.getId());
		usr.getEmprunts().remove(livre);
		getLivres().get(i).setDisponible(true);
	}
	
	public void inscritUser(User usr) throws Exception{
		if(!utilisateurs.contains(usr)){
			utilisateurs.add(usr);
		}else throw new Exception("User already registered");
	}

}
